home *** CD-ROM | disk | FTP | other *** search
- Path: uunet!mailrus!cs.utexas.edu!sun-barr!newstop!sun!CS.UCLA.EDU
- From: william@CS.UCLA.EDU (William Cheng)
- Newsgroups: comp.sources.x
- Subject: v08i059: tgif (tgif-1.9 => tgif-1.12), Patch2, Part02/03
- Message-ID: <140169@sun.Eng.Sun.COM>
- Date: 4 Aug 90 02:12:23 GMT
- Sender: news@sun.Eng.Sun.COM
- Lines: 1347
- Approved: argv@sun.com
-
- Submitted-by: william@CS.UCLA.EDU (William Cheng)
- Posting-number: Volume 8, Issue 59
- Archive-name: tgif/patch2.02
- Patch-To: tgif: Volume 7, Issue 56-76 (original: tgif-1.2)
- Patch-To: tgif: Volume 8, Issue 46-48 (Patch1: tgif-1.2 => tgif-1.9)
-
-
- ---------------------------------> cut here <---------------------------------
- *** font.c.orig Thu Aug 2 09:44:45 1990
- --- font.c Thu Aug 2 09:44:47 1990
- ***************
- *** 6,10 ****
- #ifndef lint
- static char RCSid[] =
- ! "@(#)$Header: /n/kona/u/tangram/u/william/X11/TGIF/RCS/font.c,v 1.2 90/06/26 00:05:27 william Exp $";
- #endif
-
- --- 6,10 ----
- #ifndef lint
- static char RCSid[] =
- ! "@(#)$Header: /n/kona/u/tangram/u/william/X11/TGIF/RCS/font.c,v 1.5 90/07/30 15:54:02 william Exp $";
- #endif
-
- ***************
- *** 631,635 ****
- }
-
- ! ChangeFont (FontIndex)
- int FontIndex;
- {
- --- 631,635 ----
- }
-
- ! void ChangeFont (FontIndex)
- int FontIndex;
- {
- *** grid.c.orig Thu Aug 2 09:44:54 1990
- --- grid.c Thu Aug 2 09:44:55 1990
- ***************
- *** 6,10 ****
- #ifndef lint
- static char RCSid[] =
- ! "@(#)$Header: /n/kona/u/tangram/u/william/X11/TGIF/RCS/grid.c,v 1.4 90/06/26 00:05:37 william Exp $";
- #endif
-
- --- 6,10 ----
- #ifndef lint
- static char RCSid[] =
- ! "@(#)$Header: /n/kona/u/tangram/u/william/X11/TGIF/RCS/grid.c,v 1.6 90/07/16 10:18:38 william Exp $";
- #endif
-
- ***************
- *** 30,34 ****
- int gridOn = TRUE;
- int xyGrid = DEFAULT_GRID;
- - int curScale = 1;
- int pageStyle = PORTRAIT;
- int whereToPrint = PRINTER;
- --- 30,33 ----
- ***************
- *** 586,588 ****
- --- 585,591 ----
- *GridY = Y;
- }
- + }
- +
- + void CleanUpGrids ()
- + {
- }
- *** group.c.orig Thu Aug 2 09:45:01 1990
- --- group.c Thu Aug 2 09:45:02 1990
- ***************
- *** 6,10 ****
- #ifndef lint
- static char RCSid[] =
- ! "@(#)$Header: /n/kona/u/tangram/u/william/X11/TGIF/RCS/group.c,v 1.2 90/06/26 00:05:45 william Exp $";
- #endif
-
- --- 6,10 ----
- #ifndef lint
- static char RCSid[] =
- ! "@(#)$Header: /n/kona/u/tangram/u/william/X11/TGIF/RCS/group.c,v 1.3 90/07/30 11:10:25 william Exp $";
- #endif
-
- ***************
- *** 86,92 ****
- }
-
- ! void ReadGroupObj (FP, ObjPtr)
- FILE * FP;
- struct ObjRec * * ObjPtr;
- {
- struct GroupRec * group_ptr;
- --- 86,93 ----
- }
-
- ! void ReadGroupObj (FP, ObjPtr, PRTGIF)
- FILE * FP;
- struct ObjRec * * ObjPtr;
- + int PRTGIF;
- {
- struct GroupRec * group_ptr;
- ***************
- *** 97,101 ****
- * ObjPtr = (struct ObjRec *) calloc (1, sizeof(struct ObjRec));
-
- ! while (ReadObj (FP, &obj_ptr))
- {
- obj_ptr->next = top_obj;
- --- 98,102 ----
- * ObjPtr = (struct ObjRec *) calloc (1, sizeof(struct ObjRec));
-
- ! while (ReadObj (FP, &obj_ptr, PRTGIF))
- {
- obj_ptr->next = top_obj;
- *** mainloop.c.orig Thu Aug 2 09:45:10 1990
- --- mainloop.c Thu Aug 2 09:45:12 1990
- ***************
- *** 6,13 ****
- #ifndef lint
- static char RCSid[] =
- ! "@(#)$Header: /n/kona/u/tangram/u/william/X11/TGIF/RCS/mainloop.c,v 1.4 90/06/26 00:10:31 william Exp $";
- #endif
-
- #include <stdio.h>
- #include <X11/Xlib.h>
- #include "const.h"
- --- 6,14 ----
- #ifndef lint
- static char RCSid[] =
- ! "@(#)$Header: /n/kona/u/tangram/u/william/X11/TGIF/RCS/mainloop.c,v 1.12 90/07/30 11:01:17 william Exp $";
- #endif
-
- #include <stdio.h>
- + #include <signal.h>
- #include <X11/Xlib.h>
- #include "const.h"
- ***************
- *** 22,25 ****
- --- 23,27 ----
- #include "file.e"
- #include "font.e"
- + #include "grid.e"
- #include "menu.e"
- #include "msg.e"
- ***************
- *** 29,36 ****
- --- 31,41 ----
- #include "ruler.e"
- #include "scroll.e"
- + #include "select.e"
- #include "setup.e"
- + #include "stk.e"
- #include "text.e"
-
- int geometrySpecified = FALSE;
- + int exitNormally = FALSE;
- char geometrySpec[80];
- char initMsg1[80], initMsg2[80];
- ***************
- *** 111,114 ****
- --- 116,120 ----
- {
- CleanUpDrawingWindow ();
- + CleanUpStk ();
- CleanUpChoices ();
-
- ***************
- *** 122,126 ****
- --- 128,137 ----
- CleanUpNames ();
- CleanUpText ();
- + CleanUpColors ();
- + CleanUpFiles ();
- + CleanUpGrids ();
-
- + DelAllCutSel ();
- +
- XDestroyWindow (mainDisplay, mainWindow);
- if (iconWindowCreated)
- ***************
- *** 146,149 ****
- --- 157,161 ----
- if (strcmp (Op, "init") == 0)
- {
- + exitNormally = FALSE;
- if ((mainDisplay = XOpenDisplay (NULL)) == 0)
- {
- ***************
- *** 156,160 ****
- rootWindow = RootWindow (mainDisplay, mainScreen);
-
- ! /* XSetErrorHandler (MyErrorHandler); */
-
- Setup ();
- --- 168,177 ----
- rootWindow = RootWindow (mainDisplay, mainScreen);
-
- ! XSetErrorHandler (EmergencySave);
- ! XSetIOErrorHandler (EmergencySave);
- ! signal (SIGHUP, EmergencySave);
- ! signal (SIGFPE, EmergencySave);
- ! signal (SIGBUS, EmergencySave);
- ! signal (SIGSEGV, EmergencySave);
-
- Setup ();
- ***************
- *** 175,179 ****
- Msg (s);
-
- ! while (ReadObj (fp, &obj_ptr))
- if (obj_ptr != NULL)
- AddObj (NULL, topObj, obj_ptr);
- --- 192,196 ----
- Msg (s);
-
- ! while (ReadObj (fp, &obj_ptr, FALSE))
- if (obj_ptr != NULL)
- AddObj (NULL, topObj, obj_ptr);
- ***************
- *** 202,205 ****
- --- 219,223 ----
- quitDraw = TRUE;
- XSync (mainDisplay, TRUE);
- + exitNormally = TRUE;
- AllocStrings (FuncStr, Str1, Menu1, Str2, Menu2, Str3, Menu3);
- strcpy (*FuncStr, "Quit");
- *** menu.c.orig Thu Aug 2 09:45:23 1990
- --- menu.c Thu Aug 2 09:45:25 1990
- ***************
- *** 6,10 ****
- #ifndef lint
- static char RCSid[] =
- ! "@(#)$Header: /n/kona/u/tangram/u/william/X11/TGIF/RCS/menu.c,v 1.10 90/06/25 23:58:20 william Exp $";
- #endif
-
- --- 6,10 ----
- #ifndef lint
- static char RCSid[] =
- ! "@(#)$Header: /n/kona/u/tangram/u/william/X11/TGIF/RCS/menu.c,v 1.11 90/07/30 11:00:59 william Exp $";
- #endif
-
- ***************
- *** 525,529 ****
-
- importingFile = TRUE; /* ignore the 'state' predicate */
- ! while (ReadObj (fp, &obj_ptr))
- if (obj_ptr != NULL)
- {
- --- 525,529 ----
-
- importingFile = TRUE; /* ignore the 'state' predicate */
- ! while (ReadObj (fp, &obj_ptr, FALSE))
- if (obj_ptr != NULL)
- {
- *** move.c.orig Thu Aug 2 09:45:32 1990
- --- move.c Thu Aug 2 09:45:33 1990
- ***************
- *** 7,11 ****
- #ifndef lint
- static char RCSid[] =
- ! "@(#)$Header: /n/kona/u/tangram/u/william/X11/TGIF/RCS/move.c,v 1.5 90/06/26 00:11:08 william Exp $";
- #endif
- #include <stdio.h>
- --- 7,11 ----
- #ifndef lint
- static char RCSid[] =
- ! "@(#)$Header: /n/kona/u/tangram/u/william/X11/TGIF/RCS/move.c,v 1.6 90/07/07 23:57:07 william Exp $";
- #endif
- #include <stdio.h>
- ***************
- *** 64,69 ****
- for (i = 0; i < ObjPtr->detail.g->sn; i++)
- {
- ! ObjPtr->detail.g->svlist[i].x += Dx;
- ! ObjPtr->detail.g->svlist[i].y += Dy;
- }
- }
- --- 64,69 ----
- for (i = 0; i < ObjPtr->detail.g->sn; i++)
- {
- ! ObjPtr->detail.g->svlist[i].x += (Dx>>zoomScale);
- ! ObjPtr->detail.g->svlist[i].y += (Dy>>zoomScale);
- }
- }
- *** names.c.orig Thu Aug 2 09:45:44 1990
- --- names.c Thu Aug 2 09:45:45 1990
- ***************
- *** 6,10 ****
- #ifndef lint
- static char RCSid[] =
- ! "@(#)$Header: /n/kona/u/tangram/u/william/X11/TGIF/RCS/names.c,v 1.4 90/05/22 15:49:54 william Exp $";
- #endif
-
- --- 6,10 ----
- #ifndef lint
- static char RCSid[] =
- ! "@(#)$Header: /n/kona/u/tangram/u/william/X11/TGIF/RCS/names.c,v 1.6 90/07/27 14:39:29 william Exp $";
- #endif
-
- ***************
- *** 50,53 ****
- --- 50,55 ----
- static int nameScrollAreaH; /* heighr of the grey scroll area */
-
- + static int doubleClickInterval;
- +
- static GC nameGC;
- static GC revNameGC;
- ***************
- *** 55,58 ****
- --- 57,61 ----
- void InitNames ()
- {
- + char * c_ptr;
- XGCValues values;
-
- ***************
- *** 76,79 ****
- --- 79,88 ----
-
- *curDomainName = '\0';
- +
- + if ((c_ptr = XGetDefault (mainDisplay, TOOL_NAME, "DoubleClickInterval")) !=
- + NULL)
- + doubleClickInterval = atoi (c_ptr);
- + else
- + doubleClickInterval = 300;
- }
-
- ***************
- *** 281,289 ****
- }
-
- static
- ! void NameDspHandler (button_ev)
- XButtonEvent * button_ev;
- {
- ! int row_offset, len, top;
-
- top = defaultFontAsc+1;
- --- 290,303 ----
- }
-
- + static Time lastClickTime;
- + static int justClicked;
- + static int lastNameMarked;
- +
- static
- ! int NameDspHandler (button_ev)
- XButtonEvent * button_ev;
- {
- ! int row_offset, len, top;
- ! Time click_time;
-
- top = defaultFontAsc+1;
- ***************
- *** 290,294 ****
-
- row_offset = (int)(button_ev->y / ROW_HEIGHT);
- - if (nameMarked != INVALID && nameMarked == row_offset+nameFirst) return;
-
- if (nameMarked != INVALID &&
- --- 304,307 ----
- ***************
- *** 315,318 ****
- --- 328,341 ----
- nameDspPtr[nameMarked], len);
- }
- +
- + click_time = button_ev->time;
- + if (justClicked && nameMarked != INVALID && lastNameMarked == nameMarked &&
- + (click_time-lastClickTime) < doubleClickInterval)
- + return (TRUE);
- +
- + justClicked = TRUE;
- + lastClickTime = click_time;
- + lastNameMarked = nameMarked;
- + return (INVALID);
- }
-
- ***************
- *** 396,399 ****
- --- 419,423 ----
- KeyPressMask | ButtonPressMask | ExposureMask);
-
- + justClicked = FALSE;
- while (looping)
- {
- ***************
- *** 475,479 ****
- NameScrollHandler (button_ev);
- else if (button_ev->window == nameDspWin)
- ! NameDspHandler (button_ev);
- }
- }
- --- 499,509 ----
- NameScrollHandler (button_ev);
- else if (button_ev->window == nameDspWin)
- ! {
- ! if (NameDspHandler (button_ev) != INVALID)
- ! {
- ! looping = FALSE;
- ! index = nameMarked;
- ! }
- ! }
- }
- }
- *** pattern.c.orig Thu Aug 2 09:45:58 1990
- --- pattern.c Thu Aug 2 09:45:59 1990
- ***************
- *** 6,10 ****
- #ifndef lint
- static char RCSid[] =
- ! "@(#)$Header: /n/kona/u/tangram/u/william/X11/TGIF/RCS/pattern.c,v 1.2 90/06/26 00:11:14 william Exp $";
- #endif
-
- --- 6,10 ----
- #ifndef lint
- static char RCSid[] =
- ! "@(#)$Header: /n/kona/u/tangram/u/william/X11/TGIF/RCS/pattern.c,v 1.3 90/07/11 21:30:41 william Exp $";
- #endif
-
- ***************
- *** 661,663 ****
- --- 661,770 ----
-
- if (index != INVALID) ChangeAllSelPen (index);
- + }
- +
- + static
- + int ToggleObjLineType (ObjPtr)
- + struct ObjRec * ObjPtr;
- + {
- + register struct ObjRec * obj_ptr;
- + register int changed = FALSE;
- +
- + for (obj_ptr = ObjPtr; obj_ptr != NULL; obj_ptr = obj_ptr->prev)
- + switch (obj_ptr->type)
- + {
- + case OBJ_POLY:
- + obj_ptr->detail.p->curved = !obj_ptr->detail.p->curved;
- + if (obj_ptr->detail.p->curved == LT_SPLINE)
- + obj_ptr->detail.p->svlist = MakeSplinePolyVertex (
- + &(obj_ptr->detail.p->sn), drawOrigX, drawOrigY,
- + obj_ptr->detail.p->n, obj_ptr->detail.p->vlist);
- + else
- + cfree (obj_ptr->detail.p->svlist);
- + changed = TRUE;
- + AdjObjBBox (obj_ptr);
- + break;
- + case OBJ_POLYGON:
- + obj_ptr->detail.g->curved = !obj_ptr->detail.g->curved;
- + if (obj_ptr->detail.g->curved == LT_SPLINE)
- + obj_ptr->detail.g->svlist = MakeSplinePolygonVertex (
- + &(obj_ptr->detail.g->sn), drawOrigX, drawOrigY,
- + obj_ptr->detail.g->n, obj_ptr->detail.g->vlist);
- + else
- + cfree (obj_ptr->detail.g->svlist);
- + changed = TRUE;
- + AdjObjBBox (obj_ptr);
- + break;
- +
- + case OBJ_GROUP:
- + case OBJ_SYM:
- + if (ToggleObjLineType (obj_ptr->detail.r->last))
- + {
- + changed = TRUE;
- + AdjObjBBox (obj_ptr);
- + }
- + break;
- + }
- + return (changed);
- + }
- +
- + void ToggleAllSelLineType ()
- + {
- + register struct SelRec * sel_ptr;
- + register struct ObjRec * obj_ptr;
- + register int changed = FALSE;
- +
- + if (topSel == NULL)
- + {
- + curSpline = !curSpline;
- + ShowLineType ();
- + return;
- + }
- +
- + for (sel_ptr = botSel; sel_ptr != NULL; sel_ptr = sel_ptr->prev)
- + {
- + obj_ptr = sel_ptr->obj;
- + switch (obj_ptr->type)
- + {
- + case OBJ_POLY:
- + obj_ptr->detail.p->curved = !(obj_ptr->detail.p->curved);
- + if (obj_ptr->detail.p->curved == LT_SPLINE)
- + obj_ptr->detail.p->svlist = MakeSplinePolyVertex (
- + &(obj_ptr->detail.p->sn), drawOrigX, drawOrigY,
- + obj_ptr->detail.p->n, obj_ptr->detail.p->vlist);
- + else
- + cfree (obj_ptr->detail.p->svlist);
- + changed = TRUE;
- + AdjObjBBox (obj_ptr);
- + break;
- + case OBJ_POLYGON:
- + obj_ptr->detail.g->curved = !(obj_ptr->detail.g->curved);
- + if (obj_ptr->detail.g->curved == LT_SPLINE)
- + obj_ptr->detail.g->svlist = MakeSplinePolygonVertex (
- + &(obj_ptr->detail.g->sn), drawOrigX, drawOrigY,
- + obj_ptr->detail.g->n, obj_ptr->detail.g->vlist);
- + else
- + cfree (obj_ptr->detail.g->svlist);
- + changed = TRUE;
- + AdjObjBBox (obj_ptr);
- + break;
- +
- + case OBJ_GROUP:
- + case OBJ_SYM:
- + if (ToggleObjLineType (obj_ptr->detail.r->last))
- + {
- + changed = TRUE;
- + AdjObjBBox (obj_ptr);
- + }
- + break;
- + }
- + }
- +
- + if (changed)
- + {
- + SetFileModified (TRUE);
- + HighLightReverse ();
- + RedrawAnArea (botObj, selLtX-(1<<zoomScale), selLtY-(1<<zoomScale),
- + selRbX+(1<<zoomScale), selRbY+(1<<zoomScale));
- + HighLightForward ();
- + }
- }
- *** prtgif.c.orig Thu Aug 2 09:46:13 1990
- --- prtgif.c Thu Aug 2 09:46:14 1990
- ***************
- *** 6,10 ****
- #ifndef lint
- static char RCSid[] =
- ! "@(#)$Header: /n/kona/u/tangram/u/william/X11/TGIF/RCS/prtgif.c,v 1.9 90/06/05 10:09:52 william Exp $";
- #endif
-
- --- 6,10 ----
- #ifndef lint
- static char RCSid[] =
- ! "@(#)$Header: /n/kona/u/tangram/u/william/X11/TGIF/RCS/prtgif.c,v 1.14 90/07/30 11:02:37 william Exp $";
- #endif
-
- ***************
- *** 14,37 ****
- #include "types.h"
-
- - #include "attr.e"
- - #include "box.e"
- #include "file.e"
- - #include "font.e"
- #include "grid.e"
- - #include "group.e"
- #include "obj.e"
- - #include "oval.e"
- - #include "pattern.e"
- - #include "poly.e"
- - #include "polygon.e"
- #include "setup.e"
- - #include "text.e"
-
- extern char * getenv ();
- /* extern int malloc_debug (); */
- - extern int PDrawReadObj ();
-
- ! static char drawPath[MAXSTRING];
- ! static short pDrawCursorH[] =
- {
- 9, 11, 13, 14, 19, 26,
- --- 14,30 ----
- #include "types.h"
-
- #include "file.e"
- #include "grid.e"
- #include "obj.e"
- #include "setup.e"
-
- + #define PRTGIF (TRUE)
- +
- extern char * getenv ();
- /* extern int malloc_debug (); */
-
- ! int lastFile = TRUE;
- !
- ! short pDrawCursorH[] =
- {
- 9, 11, 13, 14, 19, 26,
- ***************
- *** 53,57 ****
- 11, 10, 12, 14, 18, 24
- };
- ! static short pDrawFontAsc[] =
- {
- 7, 8, 10, 11, 15, 20,
- --- 46,51 ----
- 11, 10, 12, 14, 18, 24
- };
- !
- ! short pDrawFontAsc[] =
- {
- 7, 8, 10, 11, 15, 20,
- ***************
- *** 73,77 ****
- 8, 8, 9, 11, 14, 19
- };
- ! static short pDrawFontDes[] =
- {
- 2, 3, 3, 3, 4, 6,
- --- 67,72 ----
- 8, 8, 9, 11, 14, 19
- };
- !
- ! short pDrawFontDes[] =
- {
- 2, 3, 3, 3, 4, 6,
- ***************
- *** 95,621 ****
-
- static
- ! void PDrawDumpTextObj (FP, ObjPtr)
- ! FILE * FP;
- ! register struct ObjRec * ObjPtr;
- ! {
- ! int x, y, font_size, xinc, yinc;
- ! struct StrRec * s_ptr;
- ! struct TextRec * text_ptr = ObjPtr->detail.t;
- !
- ! if (text_ptr->pen == NONEPAT) return;
- !
- ! curFont = text_ptr->font;
- ! curStyle = text_ptr->style;
- ! curSize = text_ptr->size;
- ! textJust = text_ptr->just;
- ! curRotate = text_ptr->rotate;
- ! penPat = text_ptr->pen;
- ! textCursorH = pDrawCursorH[FontIndex(curFont,curSize,curStyle)];
- ! canvasFontAsc = pDrawFontAsc[FontIndex(curFont,curSize,curStyle)];
- ! canvasFontDes = pDrawFontDes[FontIndex(curFont,curSize,curStyle)];
- !
- ! x = ObjPtr->x;
- ! y = ObjPtr->y;
- !
- ! if (curFont == FONT_SYM)
- ! {
- ! fprintf (FP, "/Symbol ");
- ! font_size = pointSize[curSize];
- ! fprintf (FP, "findfont [%1d 0 0 -%1d 0 %1d] makefont setfont\n",
- ! font_size, font_size, font_size);
- ! }
- ! else
- ! {
- ! switch (curFont)
- ! {
- ! case FONT_TIM: fprintf (FP, "/Times"); break;
- ! case FONT_COU: fprintf (FP, "/Courier"); break;
- ! case FONT_HEL: fprintf (FP, "/Helvetica"); break;
- ! case FONT_CEN: fprintf (FP, "/NewCenturySchlbk"); break;
- ! }
- ! switch (curStyle)
- ! {
- ! case STYLE_BI:
- ! switch (curFont)
- ! {
- ! case FONT_TIM: fprintf (FP, "-BoldItalic "); break;
- ! case FONT_COU: fprintf (FP, "-BoldOblique "); break;
- ! case FONT_HEL: fprintf (FP, "-BoldOblique "); break;
- ! case FONT_CEN: fprintf (FP, "-BoldItalic "); break;
- ! }
- ! break;
- ! case STYLE_BR: fprintf (FP, "-Bold "); break;
- ! case STYLE_NI:
- ! switch (curFont)
- ! {
- ! case FONT_TIM: fprintf (FP, "-Italic "); break;
- ! case FONT_COU: fprintf (FP, "-Oblique "); break;
- ! case FONT_HEL: fprintf (FP, "-Oblique "); break;
- ! case FONT_CEN: fprintf (FP, "-Italic "); break;
- ! }
- ! break;
- ! case STYLE_NR:
- ! switch (curFont)
- ! {
- ! case FONT_TIM: fprintf (FP, "-Roman "); break;
- ! case FONT_COU: fprintf (FP, " "); break;
- ! case FONT_HEL: fprintf (FP, " "); break;
- ! case FONT_CEN: fprintf (FP, "-Roman "); break;
- ! }
- ! break;
- ! }
- ! font_size = pointSize[curSize];
- ! fprintf (FP, "findfont [%1d 0 0 -%1d 0 %1d] makefont setfont\n",
- ! font_size, font_size, font_size);
- ! }
- !
- ! switch (penPat)
- ! {
- ! case SOLIDPAT: fprintf (FP, " 0 setgray\n"); break;
- ! case BACKPAT: fprintf (FP, " 1 setgray\n"); break;
- ! default:
- ! fprintf (FP, " pat%1d 8 1 0 72 300 32 div div setpattern\n", penPat);
- ! break;
- ! }
- !
- ! switch (curRotate)
- ! {
- ! case ROTATE0: xinc = 0; yinc = textCursorH; break;
- ! case ROTATE90: xinc = -textCursorH; yinc = 0; break;
- ! case ROTATE180: xinc = 0; yinc = -textCursorH; break;
- ! case ROTATE270: xinc = textCursorH; yinc = 0; break;
- ! }
- !
- ! for (s_ptr = text_ptr->first; s_ptr != NULL; s_ptr = s_ptr->next)
- ! {
- ! switch (curRotate)
- ! {
- ! case ROTATE0:
- ! fprintf (FP, " %1d %1d moveto (", x, y-canvasFontDes);
- ! break;
- ! case ROTATE90:
- ! fprintf (FP, " %1d %1d moveto 90 rotate (", x+canvasFontDes, y);
- ! break;
- ! case ROTATE180:
- ! fprintf (FP, " %1d %1d moveto 180 rotate (", x, y+canvasFontDes);
- ! break;
- ! case ROTATE270:
- ! fprintf (FP, " %1d %1d moveto 270 rotate (", x-canvasFontDes, y);
- ! break;
- ! }
- ! DumpOneStr (FP, s_ptr->s);
- ! switch (textJust)
- ! {
- ! case JUST_L: fprintf (FP, ") show"); break;
- ! case JUST_C: fprintf (FP, ") centertext"); break;
- ! case JUST_R: fprintf (FP, ") righttext"); break;
- ! }
- ! switch (curRotate)
- ! {
- ! case ROTATE0: fprintf (FP, "\n"); break;
- ! case ROTATE90: fprintf (FP, " -90 rotate \n"); break;
- ! case ROTATE180: fprintf (FP, " -180 rotate \n"); break;
- ! case ROTATE270: fprintf (FP, " -270 rotate \n"); break;
- ! }
- ! x += xinc;
- ! y += yinc;
- ! }
- ! fprintf (FP, "\n");
- ! fprintf (FP, " 0 setgray\n");
- ! }
- !
- ! static
- ! void PDrawDumpAttrs (FP, AttrPtr)
- ! FILE * FP;
- ! register struct AttrRec * AttrPtr;
- ! {
- ! for ( ; AttrPtr != NULL; AttrPtr = AttrPtr->prev)
- ! if (AttrPtr->shown)
- ! PDrawDumpTextObj (FP, AttrPtr->obj);
- ! }
- !
- ! static
- ! void PDrawDumpAllObj (FP, ObjPtr)
- ! FILE * FP;
- ! register struct ObjRec * ObjPtr;
- ! {
- ! register struct ObjRec * obj_ptr;
- !
- ! switch (ObjPtr->type)
- ! {
- ! case OBJ_POLY:
- ! DumpPolyObj (FP, ObjPtr);
- ! PDrawDumpAttrs (FP, ObjPtr->detail.p->lattr);
- ! break;
- ! case OBJ_BOX: DumpBoxObj (FP, ObjPtr); break;
- ! case OBJ_OVAL: DumpOvalObj (FP, ObjPtr); break;
- ! case OBJ_TEXT: PDrawDumpTextObj (FP, ObjPtr); break;
- ! case OBJ_POLYGON: DumpPolygonObj (FP, ObjPtr); break;
- ! case OBJ_SYM:
- ! case OBJ_ICON:
- ! case OBJ_GROUP:
- ! obj_ptr = ObjPtr->detail.r->last;
- ! for ( ; obj_ptr != NULL; obj_ptr = obj_ptr->prev)
- ! PDrawDumpAllObj (FP, obj_ptr);
- ! PDrawDumpAttrs (FP, ObjPtr->detail.r->lattr);
- ! if (ObjPtr->type == OBJ_SYM) DumpSymOutline (FP, ObjPtr);
- ! break;
- ! }
- ! }
- !
- ! static struct StrRec * pDrawFirstStr = NULL, * pDrawLastStr = NULL;
- !
- ! static
- ! void PDrawAddStr (PrevPtr, NextPtr, StrPtr)
- ! struct StrRec * PrevPtr, * NextPtr, * StrPtr;
- ! {
- ! StrPtr->prev = PrevPtr;
- ! StrPtr->next = NextPtr;
- !
- ! if (PrevPtr == NULL)
- ! pDrawFirstStr = StrPtr;
- ! else
- ! PrevPtr->next = StrPtr;
- !
- ! if (NextPtr == NULL)
- ! pDrawLastStr = StrPtr;
- ! else
- ! NextPtr->prev = StrPtr;
- ! }
- !
- ! static
- ! void PDrawReadTextObj (FP, Inbuf, ObjPtr)
- ! FILE * FP;
- ! char * Inbuf;
- ! struct ObjRec * * ObjPtr;
- ! {
- ! register int i;
- ! struct StrRec * s_ptr;
- ! struct TextRec * text_ptr;
- ! char color_str[80], * s;
- ! char tmp_str[MAXSTRING+1], inbuf[MAXSTRING+1];
- ! int num_lines, x, y, font, style, size;
- ! int text_just, rotate, pen;
- !
- ! * ObjPtr = (struct ObjRec *) calloc (1, sizeof(struct ObjRec));
- ! s = FindChar ('(', Inbuf);
- ! s = ParseStr (s, ',', color_str);
- ! if (fileVersion <= 2)
- ! {
- ! sscanf (s, "%d , %d , %d , %d , %d , %d , %d", &x, &y, &font, &style,
- ! &size, &num_lines, &text_just);
- ! rotate = 0;
- ! pen = 1;
- ! }
- ! else
- ! sscanf (s, "%d , %d , %d , %d , %d , %d , %d , %d , %d", &x, &y, &font,
- ! &style, &size, &num_lines, &text_just, &rotate, &pen);
- !
- ! text_ptr = (struct TextRec *) calloc (1, sizeof(struct TextRec));
- ! text_ptr->just = text_just;
- ! text_ptr->lines = num_lines;
- ! text_ptr->rotate = rotate;
- ! text_ptr->pen = pen;
- !
- ! curFont = text_ptr->font = font;
- ! curStyle = text_ptr->style = style;
- ! curSize = text_ptr->size = size;
- ! textJust = text_just;
- ! curRotate = rotate;
- ! penPat = pen;
- ! textCursorH = pDrawCursorH[FontIndex(curFont,curSize,curStyle)];
- ! canvasFontAsc = pDrawFontAsc[FontIndex(curFont,curSize,curStyle)];
- !
- ! for (i = 0; i < num_lines; i++)
- ! {
- ! fgets (inbuf, MAXSTRING, FP);
- ! strcpy(tmp_str, FindChar ('"', inbuf));
- ! s = FindChar ('"', tmp_str);
- ! *(--s) = '\0';
- ! s_ptr = (struct StrRec *) calloc (1, sizeof(struct StrRec));
- ! strcpy (s_ptr->s, tmp_str);
- ! PDrawAddStr (pDrawLastStr, NULL, s_ptr);
- ! }
- ! text_ptr->first = pDrawFirstStr;
- ! text_ptr->last = pDrawLastStr;
- !
- ! pDrawFirstStr = pDrawLastStr = NULL;
- !
- ! (*ObjPtr)->x = x;
- ! (*ObjPtr)->y = y;
- ! (*ObjPtr)->type = OBJ_TEXT;
- ! (*ObjPtr)->color = FindColorIndex (color_str);
- ! (*ObjPtr)->detail.t = text_ptr;
- ! }
- !
- ! static
- ! void PDrawReadState (Inbuf)
- ! char * Inbuf;
- ! {
- ! char * s;
- !
- ! s = FindChar ('(', Inbuf);
- ! sscanf (s, "%d", &pageStyle);
- ! s = FindChar (',', s);
- ! if (*s == '\0')
- ! fileVersion = INVALID;
- ! else
- ! sscanf (s, "%d", &fileVersion);
- ! }
- !
- ! static
- ! void PDrawReadGroupObj (FP, ObjPtr)
- ! FILE * FP;
- ! struct ObjRec * * ObjPtr;
- ! {
- ! struct GroupRec * group_ptr;
- ! struct ObjRec * top_obj = NULL, * bot_obj = NULL, * obj_ptr;
- ! int ltx, lty, rbx, rby;
- ! int obj_ltx, obj_lty, obj_rbx, obj_rby;
- !
- ! * ObjPtr = (struct ObjRec *) calloc (1, sizeof(struct ObjRec));
- !
- ! while (PDrawReadObj (FP, &obj_ptr))
- ! {
- ! obj_ptr->next = top_obj;
- ! if (top_obj == NULL)
- ! bot_obj = obj_ptr;
- ! else
- ! top_obj->prev = obj_ptr;
- ! top_obj = obj_ptr;
- ! }
- ! top_obj->prev = NULL;
- !
- ! group_ptr = (struct GroupRec *) calloc (1, sizeof(struct GroupRec));
- ! group_ptr->first = top_obj;
- ! group_ptr->last = bot_obj;
- !
- ! ltx = top_obj->bbox.ltx;
- ! lty = top_obj->bbox.lty;
- ! rbx = top_obj->bbox.rbx;
- ! rby = top_obj->bbox.rby;
- ! obj_ltx = top_obj->obbox.ltx;
- ! obj_lty = top_obj->obbox.lty;
- ! obj_rbx = top_obj->obbox.rbx;
- ! obj_rby = top_obj->obbox.rby;
- ! for (obj_ptr = top_obj->next; obj_ptr != NULL; obj_ptr = obj_ptr->next)
- ! {
- ! if (obj_ptr->bbox.ltx < ltx) ltx = obj_ptr->bbox.ltx;
- ! if (obj_ptr->bbox.lty < lty) lty = obj_ptr->bbox.lty;
- ! if (obj_ptr->bbox.rbx > rbx) rbx = obj_ptr->bbox.rbx;
- ! if (obj_ptr->bbox.rby > rby) rby = obj_ptr->bbox.rby;
- ! if (obj_ptr->obbox.ltx < obj_ltx) obj_ltx = obj_ptr->obbox.ltx;
- ! if (obj_ptr->obbox.lty < obj_lty) obj_lty = obj_ptr->obbox.lty;
- ! if (obj_ptr->obbox.rbx > obj_rbx) obj_rbx = obj_ptr->obbox.rbx;
- ! if (obj_ptr->obbox.rby > obj_rby) obj_rby = obj_ptr->obbox.rby;
- ! }
- !
- ! (*ObjPtr)->x = obj_ltx;
- ! (*ObjPtr)->y = obj_lty;
- ! (*ObjPtr)->type = OBJ_GROUP;
- ! (*ObjPtr)->bbox.ltx = ltx;
- ! (*ObjPtr)->bbox.lty = lty;
- ! (*ObjPtr)->bbox.rbx = rbx;
- ! (*ObjPtr)->bbox.rby = rby;
- ! (*ObjPtr)->obbox.ltx = obj_ltx;
- ! (*ObjPtr)->obbox.lty = obj_lty;
- ! (*ObjPtr)->obbox.rbx = obj_rbx;
- ! (*ObjPtr)->obbox.rby = obj_rby;
- ! (*ObjPtr)->detail.r = group_ptr;
- ! }
- !
- ! static
- ! int PDrawReadAttr (FP, AttrPtr)
- ! FILE * FP;
- ! struct AttrRec * * AttrPtr;
- ! {
- ! struct ObjRec * TextObj;
- ! char inbuf[MAXSTRING+1], * s;
- ! char name[MAXSTRING+1], value[MAXSTRING+1];
- ! int len, shown, nameshown, inherited;
- !
- ! fgets (inbuf, MAXSTRING, FP);
- !
- ! if (inbuf[0] == ']') return (FALSE);
- !
- ! *AttrPtr = (struct AttrRec *) calloc (1, sizeof(struct AttrRec));
- !
- ! len = strlen(inbuf) - 1;
- ! inbuf[len] = '\0';
- !
- ! strcpy(name, FindChar ('"', inbuf));
- ! s = FindChar ('"', inbuf);
- ! s = FindChar (',', s);
- ! strcpy(value, FindChar ('"', s));
- ! s = FindChar ('"', value);
- ! s = FindChar (',', s);
- ! sscanf (s, "%d, %d, %d", &shown, &nameshown, &inherited);
- !
- ! s = FindChar ('"', name);
- ! *(--s) = '\0';
- ! strcpy ((*AttrPtr)->name, name);
- ! s = FindChar ('"', value);
- ! *(--s) = '\0';
- ! strcpy ((*AttrPtr)->s, value);
- !
- ! (*AttrPtr)->shown = shown;
- ! (*AttrPtr)->nameshown = nameshown;
- ! (*AttrPtr)->inherited = inherited;
- !
- ! PDrawReadObj (FP, &TextObj);
- ! TextObj->detail.t->attr = *AttrPtr;
- ! (*AttrPtr)->obj = TextObj;
- !
- ! return (TRUE);
- ! }
- !
- ! int PDrawReadObj (FP, ObjPtr)
- ! FILE * FP;
- ! struct ObjRec * * ObjPtr;
- ! {
- ! char inbuf[MAXSTRING+1], obj_name[10], tmp_str[MAXSTRING+1];
- ! char * s, * s1;
- ! int len, id;
- ! struct AttrRec * top_attr = NULL, * bot_attr = NULL, * attr_ptr;
- !
- ! while (fgets (inbuf, MAXSTRING, FP) != NULL)
- ! {
- ! if (inbuf[0] == ']') return (FALSE);
- !
- ! len = strlen(inbuf)-1;
- ! inbuf[len] = '\0';
- ! ParseStr (inbuf, '(', obj_name);
- ! if (strcmp (obj_name, "poly") == 0)
- ! {
- ! ReadPolyObj (inbuf, ObjPtr);
- ! if (fileVersion != INVALID)
- ! while (PDrawReadAttr (FP, &attr_ptr))
- ! {
- ! attr_ptr->owner = *ObjPtr;
- ! attr_ptr->prev = NULL;
- ! attr_ptr->next = top_attr;
- ! if (top_attr == NULL)
- ! bot_attr = attr_ptr;
- ! else
- ! top_attr->prev = attr_ptr;
- ! top_attr = attr_ptr;
- ! }
- ! if (bot_attr != NULL) bot_attr->next = NULL;
- ! (*ObjPtr)->detail.p->fattr = top_attr;
- ! (*ObjPtr)->detail.p->lattr = bot_attr;
- ! AdjObjBBox (*ObjPtr);
- ! return (TRUE);
- ! }
- ! else if (strcmp (obj_name, "box") == 0)
- ! {
- ! ReadBoxObj (inbuf, ObjPtr);
- ! return (TRUE);
- ! }
- ! else if (strcmp (obj_name, "oval") == 0)
- ! {
- ! ReadOvalObj (inbuf, ObjPtr);
- ! return (TRUE);
- ! }
- ! else if (strcmp (obj_name, "text") == 0)
- ! {
- ! PDrawReadTextObj (FP, inbuf, ObjPtr);
- ! return (TRUE);
- ! }
- ! else if (strcmp (obj_name, "polygon") == 0)
- ! {
- ! ReadPolygonObj (inbuf, ObjPtr);
- ! return (TRUE);
- ! }
- ! else if (strcmp (obj_name, "group") == 0)
- ! {
- ! PDrawReadGroupObj (FP, ObjPtr);
- ! if (fileVersion != INVALID)
- ! while (PDrawReadAttr (FP, &attr_ptr))
- ! {
- ! attr_ptr->owner = *ObjPtr;
- ! attr_ptr->prev = NULL;
- ! attr_ptr->next = top_attr;
- ! if (top_attr == NULL)
- ! bot_attr = attr_ptr;
- ! else
- ! top_attr->prev = attr_ptr;
- ! top_attr = attr_ptr;
- ! }
- ! if (bot_attr != NULL) bot_attr->next = NULL;
- ! (*ObjPtr)->detail.r->fattr = top_attr;
- ! (*ObjPtr)->detail.r->lattr = bot_attr;
- ! AdjObjBBox (*ObjPtr);
- ! return (TRUE);
- ! }
- ! else if (strcmp (obj_name, "sym") == 0)
- ! {
- ! PDrawReadGroupObj (FP, ObjPtr);
- ! (*ObjPtr)->type = OBJ_SYM;
- ! if (fileVersion != INVALID)
- ! while (PDrawReadAttr (FP, &attr_ptr))
- ! {
- ! attr_ptr->owner = *ObjPtr;
- ! attr_ptr->prev = NULL;
- ! attr_ptr->next = top_attr;
- ! if (top_attr == NULL)
- ! bot_attr = attr_ptr;
- ! else
- ! top_attr->prev = attr_ptr;
- ! top_attr = attr_ptr;
- ! }
- ! if (bot_attr != NULL) bot_attr->next = NULL;
- ! (*ObjPtr)->detail.r->fattr = top_attr;
- ! (*ObjPtr)->detail.r->lattr = bot_attr;
- ! AdjObjBBox (*ObjPtr);
- ! return (TRUE);
- ! }
- ! else if (strcmp (obj_name, "icon") == 0)
- ! {
- ! PDrawReadGroupObj (FP, ObjPtr);
- ! (*ObjPtr)->type = OBJ_ICON;
- ! if (fgets (inbuf, MAXSTRING, FP) == NULL) return (FALSE);
- !
- ! strcpy(tmp_str, FindChar ('"', inbuf));
- ! s = FindChar ('"', tmp_str);
- ! if (fileVersion != INVALID)
- ! {
- ! s1 = FindChar (',', s);
- ! sscanf (s1, "%d", &id);
- ! if (id >= objId) objId = id+1;
- ! (*ObjPtr)->detail.r->id = id;
- ! }
- ! (*ObjPtr)->detail.r->dirty = FALSE;
- ! *(--s) = '\0';
- ! strcpy ((*ObjPtr)->detail.r->s, tmp_str);
- ! if (fileVersion != INVALID)
- ! while (PDrawReadAttr (FP, &attr_ptr))
- ! {
- ! attr_ptr->owner = *ObjPtr;
- ! attr_ptr->prev = NULL;
- ! attr_ptr->next = top_attr;
- ! if (top_attr == NULL)
- ! bot_attr = attr_ptr;
- ! else
- ! top_attr->prev = attr_ptr;
- ! top_attr = attr_ptr;
- ! }
- ! if (bot_attr != NULL) bot_attr->next = NULL;
- ! (*ObjPtr)->detail.r->fattr = top_attr;
- ! (*ObjPtr)->detail.r->lattr = bot_attr;
- ! AdjObjBBox (*ObjPtr);
- ! return (TRUE);
- ! }
- ! else if (strcmp (obj_name, "state") == 0)
- ! {
- ! PDrawReadState (inbuf);
- ! *ObjPtr = NULL;
- ! return (TRUE);
- ! }
- ! }
- ! return (FALSE);
- ! }
- !
- ! static
- ! void PDrawLoad (FileName)
- char * FileName;
- {
- --- 90,94 ----
-
- static
- ! int PDrawLoad (FileName)
- char * FileName;
- {
- ***************
- *** 630,634 ****
- {
- printf ("Can not open '%s'.", full_name);
- ! return;
- }
-
- --- 103,107 ----
- {
- printf ("Can not open '%s'.", full_name);
- ! return (FALSE);
- }
-
- ***************
- *** 635,639 ****
- printf ("Reading '%s' ...\n", full_name);
-
- ! while (PDrawReadObj (fp, &obj_ptr))
- if (obj_ptr != NULL)
- AddObj (NULL, topObj, obj_ptr);
- --- 108,112 ----
- printf ("Reading '%s' ...\n", full_name);
-
- ! while (ReadObj (fp, &obj_ptr, PRTGIF))
- if (obj_ptr != NULL)
- AddObj (NULL, topObj, obj_ptr);
- ***************
- *** 640,714 ****
-
- fclose (fp);
- }
-
- - static
- - void PDrawDump ()
- - {
- - register struct ObjRec * obj_ptr;
- - char cmd[MAXSTRING+1], tmp_str[MAXSTRING+1];
- - char tmp_file[MAXSTRING+1], ps_file[MAXSTRING+1];
- - FILE * fp, * fps;
- -
- - if (botObj == NULL) { printf ("No object to print."); return; }
- -
- - strcpy (tmp_file, "/tmp/TgifXXXXXX");
- - mktemp (tmp_file);
- - unlink (tmp_file);
- -
- - if ((fp = fopen (tmp_file, "w")) == NULL)
- - {
- - printf ("Can not create $s, print aborted.", tmp_file);
- - return;
- - }
- -
- - printf ("Writing to %s ...\n", tmp_file);
- -
- - fprintf (fp, "%%!\n");
- - DumpBBox (fp);
- - sprintf(ps_file, "%s/.psmac", drawPath);
- - if ((fps = fopen (ps_file, "r")) == NULL)
- - {
- - printf ("Can not find %s, print aborted.\n", ps_file);
- - fclose (fp);
- - unlink (tmp_file);
- - return;
- - }
- - while (fgets (tmp_str, 256, fps) != NULL) /* copy the header file */
- - fputs (tmp_str, fp);
- -
- - fprintf (fp, "gsave\n\n");
- - switch (pageStyle)
- - {
- - case LANDSCAPE:
- - case HIGHLAND:
- - case SLIDELAND: fprintf (fp, "90 rotate\n"); break;
- - }
- - fprintf (fp, "%1d %s mul %1d %s mul translate\n", psDotsPerInch,
- - psXOffStr[pageStyle], psDotsPerInch, psYOffStr[pageStyle]);
- - fprintf (fp, "%s -%s scale\n\n",
- - psScaleStr[pageStyle], psScaleStr[pageStyle]);
- -
- - for (obj_ptr = botObj; obj_ptr != NULL; obj_ptr = obj_ptr->prev)
- - PDrawDumpAllObj (fp, obj_ptr);
- -
- - fprintf (fp, "grestore\n\n");
- - fprintf (fp, "showpage\n");
- - fclose (fp);
- -
- - sprintf (cmd, "lpr %s 2>&1", tmp_file);
- - if ((fp = popen (cmd, "r")) == NULL)
- - {
- - printf ("Can not execute '%s', print aborted.\n", cmd);
- - unlink (tmp_file);
- - return;
- - }
- - while (fgets (tmp_str, 256, fp) != NULL) sleep (5);
- -
- - pclose (fp);
- - unlink (tmp_file);
- -
- - printf ("%s printed.\n\n", tmp_file);
- - }
- -
- main (argc, argv)
- int argc;
- --- 113,119 ----
-
- fclose (fp);
- + return (TRUE);
- }
-
- main (argc, argv)
- int argc;
- ***************
- *** 717,720 ****
- --- 122,126 ----
- char inbuf[MAXSTRING+1];
- char * c_ptr;
- + int len;
-
- /* malloc_debug (1); */
- ***************
- *** 729,732 ****
- --- 135,145 ----
- strcpy (drawPath, c_ptr);
-
- + if ((argc > 1) && (strcmp (argv[1], "-p") == 0))
- + {
- + whereToPrint = LATEX_FIG;
- + argv++;
- + argc--;
- + }
- +
- switch (argc)
- {
- ***************
- *** 735,740 ****
- while (fgets (inbuf, MAXSTRING, stdin) != NULL)
- {
- ! PDrawLoad (inbuf);
- ! PDrawDump ();
- printf ("\nDraw File Name to Print> ");
- }
- --- 148,161 ----
- while (fgets (inbuf, MAXSTRING, stdin) != NULL)
- {
- ! len = strlen (inbuf);
- ! if (len > 0)
- ! {
- ! if (inbuf[--len] == '\n') inbuf[len] = '\0';
- ! if (PDrawLoad (inbuf))
- ! {
- ! Dump (PRTGIF, inbuf);
- ! DelAllObj ();
- ! }
- ! }
- printf ("\nDraw File Name to Print> ");
- }
- ***************
- *** 743,750 ****
- for (argc--, argv++; argc > 0; argc--, argv++)
- {
- ! PDrawLoad (*argv);
- ! PDrawDump ();
- ! DelAllObj ();
- }
- }
- }
- --- 164,175 ----
- for (argc--, argv++; argc > 0; argc--, argv++)
- {
- ! lastFile = (argc == 1);
- ! if (PDrawLoad (*argv))
- ! {
- ! Dump (PRTGIF, *argv);
- ! DelAllObj ();
- ! }
- }
- }
- + exit (0);
- }
- ---------------------------------> cut here <---------------------------------
- --
- Bill Cheng // UCLA Computer Science Department // (213) 206-7135
- 3277 Boelter Hall // Los Angeles, California 90024 // USA
- william@CS.UCLA.EDU ...!{uunet|ucbvax}!cs.ucla.edu!william
-
- dan
- ----------------------------------------------------
- O'Reilly && Associates argv@sun.com / argv@ora.com
- Opinions expressed reflect those of the author only.
-